// Inclusion Check
#ifndef _Inc_CPU_
#define _Inc_CPU_

// -- Includes --

// C++
#include <cstdlib>
#include <iostream>

// -- Name Space --
namespace Kestrel
{

    // -- Structs --
    
    // -- Variables --
    
    // -- Functions --
    
    // -- Class --
    
        // CPU
        class CPU
        {
          private:
                
                // Variables
                
                // Functions
                void Loop();
                
          public:  
                
                // Variables
                    // Registers
                    unsigned short PC;
                    unsigned short SP;
                    unsigned char X;
                    unsigned char Y;
                    unsigned char A;
                    // Flags
                    bool CarryFlag;
                    bool ZeroFlag;
                    bool InterruptFlag;
                    bool DecimalFlag;
                    bool BreakFlag;
                    bool OverflowFlag;
                    bool NegativeFlag;
                    
                // Functions
                CPU();
                ~CPU();
                void Init();
                void Execute();
                unsigned char FlagsToByte();
                void FlagsFromByte(unsigned char Byte);
                
        };

} // </Namespace>

// Inclusion check
#endif
